package com.cskaoyan.javase.oop3._1interface._6extend;

/**
 * 方法的形参和返回值类型
 * 在学习完接口和抽象类以后的应用
 *
 * 当方法传入的实参数据类型,能够自动类型转换到对应形参数据类型时.
 * 该实参变量允许传入方法
 *
 * 同样的返回值类型也具有这个特点.
 *
 * 重写中子类方法的返回值类型是不需要完全和父类方法返回值类型保持一致的
 * 可以保持兼容
 * 父类方法返回父类类型时
 * 子类方法可以返回子类类型
 *
 * @since 09:30
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test(new BaseASon());
        test(new A());
    }

    public static void test(A a) {

    }

    public static void test(BaseA a) {

    }

    public static IA test() {
        // return new IA();
        return new IAImpl();
    }

}

interface IA {
}

class IAImpl implements IA {
}

class A {
    public IA method(){
        return null;
    }

    public Object method2(){
        return null;
    }
}
class ASon extends A{
    @Override
    public IAImpl method() {
        return null;
    }

    @Override
    public String method2() {
        return null;
    }
}

abstract class BaseA {
}

class BaseASon extends BaseA {
}

